﻿using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using PortaCapena.OdooJsonRpcClient.Attributes;
using PortaCapena.OdooJsonRpcClient.Converters;
using PortaCapena.OdooJsonRpcClient.Models;
using System;
using System.ComponentModel;
using System.Runtime.Serialization;
using static OdooRpcClient.OdooEnum;

namespace OdooRpcClient.Model.Base
{
    [OdooTableName("res.partner")]
    [JsonConverter(typeof(OdooModelConverter))]
    public class ResPartnerOdooModel : IOdooModel
    {

        /// <summary>
        /// Name
        /// Char
        /// <summary>
        [JsonProperty("name")]
        [Description("Name")]
        public string Name { get; set; }

        /// <summary>
        /// DisplayName
        /// Char
        /// <summary>
        [JsonProperty("display_name")]
        [Description("DisplayName")]
        public string DisplayName { get; set; }

        /// <summary>
        /// Date
        /// Date
        /// <summary>
        [JsonProperty("date")]
        [Description("Date")]
        public DateTime? Date { get; set; }

        /// <summary>
        /// Title
        /// Many2one
        /// res.partner.title
        /// <summary>
        [JsonProperty("title")]
        [Description("Title")]
        public long? Title { get; set; }

        /// <summary>
        /// ParentId
        /// Many2one
        /// res.partner
        /// <summary>
        [JsonProperty("parent_id")]
        [Description("ParentId")]
        public long? ParentId { get; set; }

        /// <summary>
        /// ParentName
        /// Char
        /// <summary>
        [JsonProperty("parent_name")]
        [Description("ParentName")]
        public string ParentName { get; set; }

        /// <summary>
        /// ChildIds
        /// One2many
        /// res.partner
        /// parent_id
        /// <summary>
        [JsonProperty("child_ids")]
        [Description("ChildIds")]
        public long[] ChildIds { get; set; }

        /// <summary>
        /// Ref
        /// Char
        /// <summary>
        [JsonProperty("ref")]
        [Description("Ref")]
        public string Ref { get; set; }

        /// <summary>
        /// Lang
        /// Selection
        /// All the emails and documents sent to this contact will be translated in this language.
        /// <summary>
        [JsonProperty("lang")]
        [Description("Lang")]
        public LanguageResPartnerOdooEnum? Lang { get; set; }

        /// <summary>
        /// ActiveLangCount
        /// Integer
        /// <summary>
        [JsonProperty("active_lang_count")]
        [Description("ActiveLangCount")]
        public int? ActiveLangCount { get; set; }

        /// <summary>
        /// Tz
        /// Selection
        /// When printing documents and exporting/importing data, time values are computed according to this timezone.
        /// If the timezone is not set, UTC (Coordinated Universal Time) is used.
        /// Anywhere else, time values are computed according to the time offset of your web client.
            /// <summary>
        [JsonProperty("tz")]
        [Description("Tz")]
        public TimezoneOdooEnum? Tz { get; set; }

        /// <summary>
        /// TzOffset
        /// Char
        /// <summary>
        [JsonProperty("tz_offset")]
        [Description("TzOffset")]
        public string TzOffset { get; set; }

        /// <summary>
        /// Vat
        /// Char
        /// The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.
        /// <summary>
        [JsonProperty("vat")]
        [Description("Vat")]
        public string Vat { get; set; }

        /// <summary>
        /// SameVatPartnerId
        /// Many2one
        /// res.partner
        /// <summary>
        [JsonProperty("same_vat_partner_id")]
        [Description("SameVatPartnerId")]
        public long? SameVatPartnerId { get; set; }

        /// <summary>
        /// BankIds
        /// One2many
        /// res.partner.bank
        /// partner_id
        /// <summary>
        [JsonProperty("bank_ids")]
        [Description("BankIds")]
        public long[] BankIds { get; set; }

        /// <summary>
        /// Website
        /// Char
        /// <summary>
        [JsonProperty("website")]
        [Description("Website")]
        public string Website { get; set; }

        /// <summary>
        /// Comment
        /// Text
        /// <summary>
        [JsonProperty("comment")]
        [Description("Comment")]
        public string Comment { get; set; }

        /// <summary>
        /// CategoryId
        /// Many2many
        /// res.partner.category
        /// <summary>
        [JsonProperty("category_id")]
        [Description("CategoryId")]
        public long[] CategoryId { get; set; }

        /// <summary>
        /// CreditLimit
        /// Float
        /// <summary>
        [JsonProperty("credit_limit")]
        [Description("CreditLimit")]
        public double? CreditLimit { get; set; }

        /// <summary>
        /// Active
        /// Boolean
        /// <summary>
        [JsonProperty("active")]
        [Description("Active")]
        public bool? Active { get; set; }

        /// <summary>
        /// Employee
        /// Boolean
        /// Check this box if this contact is an Employee.
        /// <summary>
        [JsonProperty("employee")]
        [Description("Employee")]
        public bool? Employee { get; set; }

        /// <summary>
        /// Function
        /// Char
        /// <summary>
        [JsonProperty("function")]
        [Description("Function")]
        public string Function { get; set; }

        /// <summary>
        /// Type
        /// Selection
        /// Invoice & Delivery addresses are used in sales orders. Private addresses are only visible by authorized users.
        /// <summary>
        [JsonProperty("type")]
        [Description("Type")]
        public AddressTypeResPartnerOdooEnum? Type { get; set; }

        /// <summary>
        /// Street
        /// Char
        /// <summary>
        [JsonProperty("street")]
        [Description("Street")]
        public string Street { get; set; }

        /// <summary>
        /// Street2
        /// Char
        /// <summary>
        [JsonProperty("street2")]
        [Description("Street2")]
        public string Street2 { get; set; }

        /// <summary>
        /// Zip
        /// Char
        /// <summary>
        [JsonProperty("zip")]
        [Description("Zip")]
        public string Zip { get; set; }

        /// <summary>
        /// City
        /// Char
        /// <summary>
        [JsonProperty("city")]
        [Description("City")]
        public string City { get; set; }

        /// <summary>
        /// StateId
        /// Many2one
        /// res.country.state
        /// <summary>
        [JsonProperty("state_id")]
        [Description("StateId")]
        public long? StateId { get; set; }

        /// <summary>
        /// CountryId
        /// Many2one
        /// res.country
        /// <summary>
        [JsonProperty("country_id")]
        [Description("CountryId")]
        public long? CountryId { get; set; }

        /// <summary>
        /// PartnerLatitude
        /// Float
        /// <summary>
        [JsonProperty("partner_latitude")]
        [Description("PartnerLatitude")]
        public double? PartnerLatitude { get; set; }

        /// <summary>
        /// PartnerLongitude
        /// Float
        /// <summary>
        [JsonProperty("partner_longitude")]
        [Description("PartnerLongitude")]
        public double? PartnerLongitude { get; set; }

        /// <summary>
        /// EmailFormatted
        /// Char
        /// Format email address "Name <email@domain>"
        /// <summary>
        [JsonProperty("email_formatted")]
        [Description("EmailFormatted")]
        public string EmailFormatted { get; set; }

        /// <summary>
        /// Mobile
        /// Char
        /// <summary>
        [JsonProperty("mobile")]
        [Description("Mobile")]
        public string Mobile { get; set; }

        /// <summary>
        /// IsCompany
        /// Boolean
        /// Check if the contact is a company, otherwise it is a person
        /// <summary>
        [JsonProperty("is_company")]
        [Description("IsCompany")]
        public bool? IsCompany { get; set; }

        /// <summary>
        /// IndustryId
        /// Many2one
        /// res.partner.industry
        /// <summary>
        [JsonProperty("industry_id")]
        [Description("IndustryId")]
        public long? IndustryId { get; set; }

        /// <summary>
        /// CompanyType
        /// Selection
        /// <summary>
        [JsonProperty("company_type")]
        [Description("CompanyType")]
        public CompanyTypeResPartnerOdooEnum? CompanyType { get; set; }

        /// <summary>
        /// CompanyId
        /// Many2one
        /// res.company
        /// <summary>
        [JsonProperty("company_id")]
        [Description("CompanyId")]
        public long? CompanyId { get; set; }

        /// <summary>
        /// Color
        /// Integer
        /// <summary>
        [JsonProperty("color")]
        [Description("Color")]
        public int? Color { get; set; }

        /// <summary>
        /// UserIds
        /// One2many
        /// res.users
        /// partner_id
        /// <summary>
        [JsonProperty("user_ids")]
        [Description("UserIds")]
        public long[] UserIds { get; set; }

        /// <summary>
        /// PartnerShare
        /// Boolean
        /// Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.
        /// <summary>
        [JsonProperty("partner_share")]
        [Description("PartnerShare")]
        public bool? PartnerShare { get; set; }

        /// <summary>
        /// ContactAddress
        /// Char
        /// <summary>
        [JsonProperty("contact_address")]
        [Description("ContactAddress")]
        public string ContactAddress { get; set; }

        /// <summary>
        /// CommercialPartnerId
        /// Many2one
        /// res.partner
        /// <summary>
        [JsonProperty("commercial_partner_id")]
        [Description("CommercialPartnerId")]
        public long? CommercialPartnerId { get; set; }

        /// <summary>
        /// CommercialCompanyName
        /// Char
        /// <summary>
        [JsonProperty("commercial_company_name")]
        [Description("CommercialCompanyName")]
        public string CommercialCompanyName { get; set; }

        /// <summary>
        /// CompanyName
        /// Char
        /// <summary>
        [JsonProperty("company_name")]
        [Description("CompanyName")]
        public string CompanyName { get; set; }

        /// <summary>
        /// Barcode
        /// Char
        /// Use a barcode to identify this contact.
        /// <summary>
        [JsonProperty("barcode")]
        [Description("Barcode")]
        public string Barcode { get; set; }

        /// <summary>
        /// Self
        /// Many2one
        /// res.partner
        /// <summary>
        [JsonProperty("self")]
        [Description("Self")]
        public long? Self { get; set; }

        /// <summary>
        /// ImStatus
        /// Char
        /// <summary>
        [JsonProperty("im_status")]
        [Description("ImStatus")]
        public string ImStatus { get; set; }

        /// <summary>
        /// ActivityIds
        /// One2many
        /// mail.activity
        /// res_id
        /// <summary>
        [JsonProperty("activity_ids")]
        [Description("ActivityIds")]
        public long[] ActivityIds { get; set; }

        /// <summary>
        /// ActivityState
        /// Selection
        /// Status based on activities
        /// Overdue: Due date is already passed
        /// Today: Activity date is today
        /// Planned: Future activities.
        /// <summary>
        [JsonProperty("activity_state")]
        [Description("ActivityState")]
        public ActivityStateResPartnerOdooEnum? ActivityState { get; set; }

        /// <summary>
        /// ActivityUserId
        /// Many2one
        /// res.users
        /// <summary>
        [JsonProperty("activity_user_id")]
        [Description("ActivityUserId")]
        public long? ActivityUserId { get; set; }

        /// <summary>
        /// ActivityTypeId
        /// Many2one
        /// mail.activity.type
        /// <summary>
        [JsonProperty("activity_type_id")]
        [Description("ActivityTypeId")]
        public long? ActivityTypeId { get; set; }

        /// <summary>
        /// ActivityTypeIcon
        /// Char
        /// Font awesome icon e.g. fa-tasks
        /// <summary>
        [JsonProperty("activity_type_icon")]
        [Description("ActivityTypeIcon")]
        public string ActivityTypeIcon { get; set; }

        /// <summary>
        /// ActivityDateDeadline
        /// Date
        /// <summary>
        [JsonProperty("activity_date_deadline")]
        [Description("ActivityDateDeadline")]
        public DateTime? ActivityDateDeadline { get; set; }

        /// <summary>
        /// MyActivityDateDeadline
        /// Date
        /// <summary>
        [JsonProperty("my_activity_date_deadline")]
        [Description("MyActivityDateDeadline")]
        public DateTime? MyActivityDateDeadline { get; set; }

        /// <summary>
        /// ActivitySummary
        /// Char
        /// <summary>
        [JsonProperty("activity_summary")]
        [Description("ActivitySummary")]
        public string ActivitySummary { get; set; }

        /// <summary>
        /// ActivityExceptionDecoration
        /// Selection
        /// Type of the exception activity on record.
        /// <summary>
        [JsonProperty("activity_exception_decoration")]
        [Description("ActivityExceptionDecoration")]
        public ActivityExceptionDecorationResPartnerOdooEnum? ActivityExceptionDecoration { get; set; }

        /// <summary>
        /// ActivityExceptionIcon
        /// Char
        /// Icon to indicate an exception activity.
        /// <summary>
        [JsonProperty("activity_exception_icon")]
        [Description("ActivityExceptionIcon")]
        public string ActivityExceptionIcon { get; set; }

        /// <summary>
        /// MessageIsFollower
        /// Boolean
        /// <summary>
        [JsonProperty("message_is_follower")]
        [Description("MessageIsFollower")]
        public bool? MessageIsFollower { get; set; }

        /// <summary>
        /// MessageFollowerIds
        /// One2many
        /// mail.followers
        /// res_id
        /// <summary>
        [JsonProperty("message_follower_ids")]
        [Description("MessageFollowerIds")]
        public long[] MessageFollowerIds { get; set; }

        /// <summary>
        /// MessagePartnerIds
        /// Many2many
        /// res.partner
        /// <summary>
        [JsonProperty("message_partner_ids")]
        [Description("MessagePartnerIds")]
        public long[] MessagePartnerIds { get; set; }

        /// <summary>
        /// MessageChannelIds
        /// Many2many
        /// mail.channel
        /// <summary>
        [JsonProperty("message_channel_ids")]
        [Description("MessageChannelIds")]
        public long[] MessageChannelIds { get; set; }

        /// <summary>
        /// MessageIds
        /// One2many
        /// mail.message
        /// res_id
        /// <summary>
        [JsonProperty("message_ids")]
        [Description("MessageIds")]
        public long[] MessageIds { get; set; }

        /// <summary>
        /// MessageUnread
        /// Boolean
        /// If checked, new messages require your attention.
        /// <summary>
        [JsonProperty("message_unread")]
        [Description("MessageUnread")]
        public bool? MessageUnread { get; set; }

        /// <summary>
        /// MessageUnreadCounter
        /// Integer
        /// Number of unread messages
        /// <summary>
        [JsonProperty("message_unread_counter")]
        [Description("MessageUnreadCounter")]
        public int? MessageUnreadCounter { get; set; }

        /// <summary>
        /// MessageNeedaction
        /// Boolean
        /// If checked, new messages require your attention.
        /// <summary>
        [JsonProperty("message_needaction")]
        [Description("MessageNeedaction")]
        public bool? MessageNeedaction { get; set; }

        /// <summary>
        /// MessageNeedactionCounter
        /// Integer
        /// Number of messages which requires an action
        /// <summary>
        [JsonProperty("message_needaction_counter")]
        [Description("MessageNeedactionCounter")]
        public int? MessageNeedactionCounter { get; set; }

        /// <summary>
        /// MessageHasError
        /// Boolean
        /// If checked, some messages have a delivery error.
        /// <summary>
        [JsonProperty("message_has_error")]
        [Description("MessageHasError")]
        public bool? MessageHasError { get; set; }

        /// <summary>
        /// MessageHasErrorCounter
        /// Integer
        /// Number of messages with delivery error
        /// <summary>
        [JsonProperty("message_has_error_counter")]
        [Description("MessageHasErrorCounter")]
        public int? MessageHasErrorCounter { get; set; }

        /// <summary>
        /// MessageAttachmentCount
        /// Integer
        /// <summary>
        [JsonProperty("message_attachment_count")]
        [Description("MessageAttachmentCount")]
        public int? MessageAttachmentCount { get; set; }

        /// <summary>
        /// MessageMainAttachmentId
        /// Many2one
        /// ir.attachment
        /// <summary>
        [JsonProperty("message_main_attachment_id")]
        [Description("MessageMainAttachmentId")]
        public long? MessageMainAttachmentId { get; set; }

        /// <summary>
        /// EmailNormalized
        /// Char
        /// This field is used to search on email address as the primary email field can contain more than strictly an email address.
        /// <summary>
        [JsonProperty("email_normalized")]
        [Description("EmailNormalized")]
        public string EmailNormalized { get; set; }

        /// <summary>
        /// IsBlacklisted
        /// Boolean
        /// If the email address is on the blacklist, the contact won't receive mass mailing anymore, from any list
        /// <summary>
        [JsonProperty("is_blacklisted")]
        [Description("IsBlacklisted")]
        public bool? IsBlacklisted { get; set; }

        /// <summary>
        /// MessageBounce
        /// Integer
        /// Counter of the number of bounced emails for this contact
        /// <summary>
        [JsonProperty("message_bounce")]
        [Description("MessageBounce")]
        public int? MessageBounce { get; set; }

        /// <summary>
        /// Email
        /// Char
        /// <summary>
        [JsonProperty("email")]
        [Description("Email")]
        public string Email { get; set; }

        /// <summary>
        /// Phone
        /// Char
        /// <summary>
        [JsonProperty("phone")]
        [Description("Phone")]
        public string Phone { get; set; }

        /// <summary>
        /// ChannelIds
        /// Many2many
        /// mail.channel
        /// <summary>
        [JsonProperty("channel_ids")]
        [Description("ChannelIds")]
        public long[] ChannelIds { get; set; }

        /// <summary>
        /// UserId
        /// Many2one
        /// The internal user in charge of this contact.
        /// res.users
        /// <summary>
        [JsonProperty("user_id")]
        [Description("UserId")]
        public long? UserId { get; set; }

        /// <summary>
        /// SignupToken
        /// Char
        /// <summary>
        [JsonProperty("signup_token")]
        [Description("SignupToken")]
        public string SignupToken { get; set; }

        /// <summary>
        /// SignupType
        /// Char
        /// <summary>
        [JsonProperty("signup_type")]
        [Description("SignupType")]
        public string SignupType { get; set; }

        /// <summary>
        /// SignupExpiration
        /// Datetime
        /// <summary>
        [JsonProperty("signup_expiration")]
        [Description("SignupExpiration")]
        public DateTime? SignupExpiration { get; set; }

        /// <summary>
        /// SignupValid
        /// Boolean
        /// <summary>
        [JsonProperty("signup_valid")]
        [Description("SignupValid")]
        public bool? SignupValid { get; set; }

        /// <summary>
        /// SignupUrl
        /// Char
        /// <summary>
        [JsonProperty("signup_url")]
        [Description("SignupUrl")]
        public string SignupUrl { get; set; }

        /// <summary>
        /// PhoneSanitized
        /// Char
        /// Field used to store sanitized phone number. Helps speeding up searches and comparisons.
        /// <summary>
        [JsonProperty("phone_sanitized")]
        [Description("PhoneSanitized")]
        public string PhoneSanitized { get; set; }

        /// <summary>
        /// PhoneSanitizedBlacklisted
        /// Boolean
        /// If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list
        /// <summary>
        [JsonProperty("phone_sanitized_blacklisted")]
        [Description("PhoneSanitizedBlacklisted")]
        public bool? PhoneSanitizedBlacklisted { get; set; }

        /// <summary>
        /// PhoneBlacklisted
        /// Boolean
        /// Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted             when there is both a mobile and phone field in a model.
        /// <summary>
        [JsonProperty("phone_blacklisted")]
        [Description("PhoneBlacklisted")]
        public bool? PhoneBlacklisted { get; set; }

        /// <summary>
        /// MobileBlacklisted
        /// Boolean
        /// Indicates if a blacklisted sanitized phone number is a mobile number. Helps distinguish which number is blacklisted             when there is both a mobile and phone field in a model.
        /// <summary>
        [JsonProperty("mobile_blacklisted")]
        [Description("MobileBlacklisted")]
        public bool? MobileBlacklisted { get; set; }

        /// <summary>
        /// PartnerGid
        /// Integer
        /// <summary>
        [JsonProperty("partner_gid")]
        [Description("PartnerGid")]
        public int? PartnerGid { get; set; }

        /// <summary>
        /// AdditionalInfo
        /// Char
        /// <summary>
        [JsonProperty("additional_info")]
        [Description("AdditionalInfo")]
        public string AdditionalInfo { get; set; }

        /// <summary>
        /// MessageHasSmsError
        /// Boolean
        /// If checked, some messages have a delivery error.
        /// <summary>
        [JsonProperty("message_has_sms_error")]
        [Description("MessageHasSmsError")]
        public bool? MessageHasSmsError { get; set; }

        /// <summary>
        /// Image1920
        /// Binary
        /// <summary>
        [JsonProperty("image_1920")]
        [Description("Image1920")]
        public string Image1920 { get; set; }

        /// <summary>
        /// CalendarLastNotifAck
        /// Datetime
        /// <summary>
        [JsonProperty("calendar_last_notif_ack")]
        [Description("CalendarLastNotifAck")]
        public DateTime? CalendarLastNotifAck { get; set; }

        /// <summary>
        /// PlanToChangeCar
        /// Boolean
        /// <summary>
        [JsonProperty("plan_to_change_car")]
        [Description("PlanToChangeCar")]
        public bool? PlanToChangeCar { get; set; }

        /// <summary>
        /// PropertyProductPricelist
        /// Many2one
        /// This pricelist will be used, instead of the default one, for sales to the current partner
        /// product.pricelist
        /// <summary>
        [JsonProperty("property_product_pricelist")]
        [Description("PropertyProductPricelist")]
        public long? PropertyProductPricelist { get; set; }

        /// <summary>
        /// WebsiteMessageIds
        /// One2many
        /// Website communication history
        /// mail.message
        /// res_id
        /// <summary>
        [JsonProperty("website_message_ids")]
        [Description("WebsiteMessageIds")]
        public long[] WebsiteMessageIds { get; set; }

        /// <summary>
        /// CertificationsCount
        /// Integer
        /// <summary>
        [JsonProperty("certifications_count")]
        [Description("CertificationsCount")]
        public int? CertificationsCount { get; set; }

        /// <summary>
        /// CertificationsCompanyCount
        /// Integer
        /// <summary>
        [JsonProperty("certifications_company_count")]
        [Description("CertificationsCompanyCount")]
        public int? CertificationsCompanyCount { get; set; }

        /// <summary>
        /// Credit
        /// Monetary
        /// Total amount this customer owes you.
        /// <summary>
        [JsonProperty("credit")]
        [Description("Credit")]
        public decimal? Credit { get; set; }

        /// <summary>
        /// Debit
        /// Monetary
        /// Total amount you have to pay to this vendor.
        /// <summary>
        [JsonProperty("debit")]
        [Description("Debit")]
        public decimal? Debit { get; set; }

        /// <summary>
        /// DebitLimit
        /// Monetary
        /// <summary>
        [JsonProperty("debit_limit")]
        [Description("DebitLimit")]
        public decimal? DebitLimit { get; set; }

        /// <summary>
        /// TotalInvoiced
        /// Monetary
        /// <summary>
        [JsonProperty("total_invoiced")]
        [Description("TotalInvoiced")]
        public decimal? TotalInvoiced { get; set; }

        /// <summary>
        /// CurrencyId
        /// Many2one
        /// Utility field to express amount currency
        /// res.currency
        /// <summary>
        [JsonProperty("currency_id")]
        [Description("CurrencyId")]
        public long? CurrencyId { get; set; }

        /// <summary>
        /// JournalItemCount
        /// Integer
        /// <summary>
        [JsonProperty("journal_item_count")]
        [Description("JournalItemCount")]
        public int? JournalItemCount { get; set; }

        /// <summary>
        /// PropertyAccountPayableId
        /// Many2one
        /// This account will be used instead of the default one as the payable account for the current partner
        /// required
        /// account.account
        /// <summary>
        [JsonProperty("property_account_payable_id")]
        [Description("PropertyAccountPayableId")]
        public long PropertyAccountPayableId { get; set; }

        /// <summary>
        /// PropertyAccountReceivableId
        /// Many2one
        /// This account will be used instead of the default one as the receivable account for the current partner
        /// required
        /// account.account
        /// <summary>
        [JsonProperty("property_account_receivable_id")]
        [Description("PropertyAccountReceivableId")]
        public long PropertyAccountReceivableId { get; set; }

        /// <summary>
        /// PropertyAccountPositionId
        /// Many2one
        /// The fiscal position determines the taxes/accounts used for this contact.
        /// account.fiscal.position
        /// <summary>
        [JsonProperty("property_account_position_id")]
        [Description("PropertyAccountPositionId")]
        public long? PropertyAccountPositionId { get; set; }

        /// <summary>
        /// PropertyPaymentTermId
        /// Many2one
        /// This payment term will be used instead of the default one for sales orders and customer invoices
        /// account.payment.term
        /// <summary>
        [JsonProperty("property_payment_term_id")]
        [Description("PropertyPaymentTermId")]
        public long? PropertyPaymentTermId { get; set; }

        /// <summary>
        /// PropertySupplierPaymentTermId
        /// Many2one
        /// This payment term will be used instead of the default one for purchase orders and vendor bills
        /// account.payment.term
        /// <summary>
        [JsonProperty("property_supplier_payment_term_id")]
        [Description("PropertySupplierPaymentTermId")]
        public long? PropertySupplierPaymentTermId { get; set; }

        /// <summary>
        /// RefCompanyIds
        /// One2many
        /// res.company
        /// partner_id
        /// <summary>
        [JsonProperty("ref_company_ids")]
        [Description("RefCompanyIds")]
        public long[] RefCompanyIds { get; set; }

        /// <summary>
        /// HasUnreconciledEntries
        /// Boolean
        /// The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.
        /// <summary>
        [JsonProperty("has_unreconciled_entries")]
        [Description("HasUnreconciledEntries")]
        public bool? HasUnreconciledEntries { get; set; }

        /// <summary>
        /// LastTimeEntriesChecked
        /// Datetime
        /// Last time the invoices & payments matching was performed for this partner. It is set either if there's not at least an unreconciled debit and an unreconciled credit or if you click the "Done" button.
        /// <summary>
        [JsonProperty("last_time_entries_checked")]
        [Description("LastTimeEntriesChecked")]
        public DateTime? LastTimeEntriesChecked { get; set; }

        /// <summary>
        /// InvoiceIds
        /// One2many
        /// account.move
        /// partner_id
        /// <summary>
        [JsonProperty("invoice_ids")]
        [Description("InvoiceIds")]
        public long[] InvoiceIds { get; set; }

        /// <summary>
        /// ContractIds
        /// One2many
        /// account.analytic.account
        /// partner_id
        /// <summary>
        [JsonProperty("contract_ids")]
        [Description("ContractIds")]
        public long[] ContractIds { get; set; }

        /// <summary>
        /// BankAccountCount
        /// Integer
        /// <summary>
        [JsonProperty("bank_account_count")]
        [Description("BankAccountCount")]
        public int? BankAccountCount { get; set; }

        /// <summary>
        /// Trust
        /// Selection
        /// <summary>
        [JsonProperty("trust")]
        [Description("Trust")]
        public DegreeOfTrustYouHaveInThisDebtorResPartnerOdooEnum? Trust { get; set; }

        /// <summary>
        /// InvoiceWarn
        /// Selection
        /// Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
        /// <summary>
        [JsonProperty("invoice_warn")]
        [Description("InvoiceWarn")]
        public InvoiceResPartnerOdooEnum? InvoiceWarn { get; set; }

        /// <summary>
        /// InvoiceWarnMsg
        /// Text
        /// <summary>
        [JsonProperty("invoice_warn_msg")]
        [Description("InvoiceWarnMsg")]
        public string InvoiceWarnMsg { get; set; }

        /// <summary>
        /// SupplierRank
        /// Integer
        /// <summary>
        [JsonProperty("supplier_rank")]
        [Description("SupplierRank")]
        public int? SupplierRank { get; set; }

        /// <summary>
        /// CustomerRank
        /// Integer
        /// <summary>
        [JsonProperty("customer_rank")]
        [Description("CustomerRank")]
        public int? CustomerRank { get; set; }

        /// <summary>
        /// TaskIds
        /// One2many
        /// project.task
        /// partner_id
        /// <summary>
        [JsonProperty("task_ids")]
        [Description("TaskIds")]
        public long[] TaskIds { get; set; }

        /// <summary>
        /// TaskCount
        /// Integer
        /// <summary>
        [JsonProperty("task_count")]
        [Description("TaskCount")]
        public int? TaskCount { get; set; }

        /// <summary>
        /// PaymentTokenIds
        /// One2many
        /// payment.token
        /// partner_id
        /// <summary>
        [JsonProperty("payment_token_ids")]
        [Description("PaymentTokenIds")]
        public long[] PaymentTokenIds { get; set; }

        /// <summary>
        /// PaymentTokenCount
        /// Integer
        /// <summary>
        [JsonProperty("payment_token_count")]
        [Description("PaymentTokenCount")]
        public int? PaymentTokenCount { get; set; }

        /// <summary>
        /// CountryEnforceCities
        /// Boolean
        /// Check this box to ensure every address created in that country has a 'City' chosen in the list of the country's cities.
        /// <summary>
        [JsonProperty("country_enforce_cities")]
        [Description("CountryEnforceCities")]
        public bool? CountryEnforceCities { get; set; }

        /// <summary>
        /// CityId
        /// Many2one
        /// res.city
        /// <summary>
        [JsonProperty("city_id")]
        [Description("CityId")]
        public long? CityId { get; set; }

        /// <summary>
        /// StreetName
        /// Char
        /// <summary>
        [JsonProperty("street_name")]
        [Description("StreetName")]
        public string StreetName { get; set; }

        /// <summary>
        /// StreetNumber
        /// Char
        /// <summary>
        [JsonProperty("street_number")]
        [Description("StreetNumber")]
        public string StreetNumber { get; set; }

        /// <summary>
        /// StreetNumber2
        /// Char
        /// <summary>
        [JsonProperty("street_number2")]
        [Description("StreetNumber2")]
        public string StreetNumber2 { get; set; }

        /// <summary>
        /// DateLocalization
        /// Date
        /// <summary>
        [JsonProperty("date_localization")]
        [Description("DateLocalization")]
        public DateTime? DateLocalization { get; set; }

        /// <summary>
        /// EventCount
        /// Integer
        /// Number of events the partner has participated.
        /// <summary>
        [JsonProperty("event_count")]
        [Description("EventCount")]
        public int? EventCount { get; set; }

        /// <summary>
        /// TeamId
        /// Many2one
        /// If set, this Sales Team will be used for sales and assignments related to this partner
        /// crm.team
        /// <summary>
        [JsonProperty("team_id")]
        [Description("TeamId")]
        public long? TeamId { get; set; }

        /// <summary>
        /// OpportunityIds
        /// One2many
        /// crm.lead
        /// partner_id
        /// <summary>
        [JsonProperty("opportunity_ids")]
        [Description("OpportunityIds")]
        public long[] OpportunityIds { get; set; }

        /// <summary>
        /// MeetingIds
        /// Many2many
        /// calendar.event
        /// <summary>
        [JsonProperty("meeting_ids")]
        [Description("MeetingIds")]
        public long[] MeetingIds { get; set; }

        /// <summary>
        /// OpportunityCount
        /// Integer
        /// <summary>
        [JsonProperty("opportunity_count")]
        [Description("OpportunityCount")]
        public int? OpportunityCount { get; set; }

        /// <summary>
        /// MeetingCount
        /// Integer
        /// <summary>
        [JsonProperty("meeting_count")]
        [Description("MeetingCount")]
        public int? MeetingCount { get; set; }

        /// <summary>
        /// PropertyStockCustomer
        /// Many2one
        /// The stock location used as destination when sending goods to this contact.
        /// stock.location
        /// <summary>
        [JsonProperty("property_stock_customer")]
        [Description("PropertyStockCustomer")]
        public long? PropertyStockCustomer { get; set; }

        /// <summary>
        /// PropertyStockSupplier
        /// Many2one
        /// The stock location used as source when receiving goods from this contact.
        /// stock.location
        /// <summary>
        [JsonProperty("property_stock_supplier")]
        [Description("PropertyStockSupplier")]
        public long? PropertyStockSupplier { get; set; }

        /// <summary>
        /// PickingWarn
        /// Selection
        /// Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
        /// <summary>
        [JsonProperty("picking_warn")]
        [Description("PickingWarn")]
        public StockPickingResPartnerOdooEnum? PickingWarn { get; set; }

        /// <summary>
        /// PickingWarnMsg
        /// Text
        /// <summary>
        [JsonProperty("picking_warn_msg")]
        [Description("PickingWarnMsg")]
        public string PickingWarnMsg { get; set; }

        /// <summary>
        /// PropertyPaymentMethodId
        /// Many2one
        /// Preferred payment method when paying this vendor. This is used to filter vendor bills by preferred payment method to register payments in mass. Use cases: create bank files for batch wires, check runs.
        /// account.payment.method
        /// <summary>
        [JsonProperty("property_payment_method_id")]
        [Description("PropertyPaymentMethodId")]
        public long? PropertyPaymentMethodId { get; set; }

        /// <summary>
        /// AssociateMember
        /// Many2one
        /// A member with whom you want to associate your membership.It will consider the membership state of the associated member.
        /// res.partner
        /// <summary>
        [JsonProperty("associate_member")]
        [Description("AssociateMember")]
        public long? AssociateMember { get; set; }

        /// <summary>
        /// MemberLines
        /// One2many
        /// membership.membership_line
        /// partner
        /// <summary>
        [JsonProperty("member_lines")]
        [Description("MemberLines")]
        public long[] MemberLines { get; set; }

        /// <summary>
        /// FreeMember
        /// Boolean
        /// Select if you want to give free membership.
        /// <summary>
        [JsonProperty("free_member")]
        [Description("FreeMember")]
        public bool? FreeMember { get; set; }

        /// <summary>
        /// MembershipAmount
        /// Float
        /// The price negotiated by the partner
        /// <summary>
        [JsonProperty("membership_amount")]
        [Description("MembershipAmount")]
        public double? MembershipAmount { get; set; }

        /// <summary>
        /// MembershipState
        /// Selection
        /// It indicates the membership state.
        ///     -Non Member: A partner who has not applied for any membership.
        ///     -Cancelled Member: A member who has cancelled his membership.
        ///     -Old Member: A member whose membership date has expired.
        ///     -Waiting Member: A member who has applied for the membership and whose invoice is going to be created.
        ///     -Invoiced Member: A member whose invoice has been created.
        ///     -Paying member: A member who has paid the membership fee.
        /// <summary>
        [JsonProperty("membership_state")]
        [Description("MembershipState")]
        public CurrentMembershipStatusResPartnerOdooEnum? MembershipState { get; set; }

        /// <summary>
        /// MembershipStart
        /// Date
        /// Date from which membership becomes active.
        /// <summary>
        [JsonProperty("membership_start")]
        [Description("MembershipStart")]
        public DateTime? MembershipStart { get; set; }

        /// <summary>
        /// MembershipStop
        /// Date
        /// Date until which membership remains active.
        /// <summary>
        [JsonProperty("membership_stop")]
        [Description("MembershipStop")]
        public DateTime? MembershipStop { get; set; }

        /// <summary>
        /// MembershipCancel
        /// Date
        /// Date on which membership has been cancelled
        /// <summary>
        [JsonProperty("membership_cancel")]
        [Description("MembershipCancel")]
        public DateTime? MembershipCancel { get; set; }

        /// <summary>
        /// PropertyPurchaseCurrencyId
        /// Many2one
        /// This currency will be used, instead of the default one, for purchases from the current partner
        /// res.currency
        /// <summary>
        [JsonProperty("property_purchase_currency_id")]
        [Description("PropertyPurchaseCurrencyId")]
        public long? PropertyPurchaseCurrencyId { get; set; }

        /// <summary>
        /// PurchaseOrderCount
        /// Integer
        /// <summary>
        [JsonProperty("purchase_order_count")]
        [Description("PurchaseOrderCount")]
        public int? PurchaseOrderCount { get; set; }

        /// <summary>
        /// SupplierInvoiceCount
        /// Integer
        /// <summary>
        [JsonProperty("supplier_invoice_count")]
        [Description("SupplierInvoiceCount")]
        public int? SupplierInvoiceCount { get; set; }

        /// <summary>
        /// PurchaseWarn
        /// Selection
        /// Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
        /// <summary>
        [JsonProperty("purchase_warn")]
        [Description("PurchaseWarn")]
        public PurchaseOrderResPartnerOdooEnum? PurchaseWarn { get; set; }

        /// <summary>
        /// PurchaseWarnMsg
        /// Text
        /// <summary>
        [JsonProperty("purchase_warn_msg")]
        [Description("PurchaseWarnMsg")]
        public string PurchaseWarnMsg { get; set; }

        /// <summary>
        /// ReceiptReminderEmail
        /// Boolean
        /// Automatically send a confirmation email to the vendor X days before the expected receipt date, asking him to confirm the exact date.
        /// <summary>
        [JsonProperty("receipt_reminder_email")]
        [Description("ReceiptReminderEmail")]
        public bool? ReceiptReminderEmail { get; set; }

        /// <summary>
        /// ReminderDateBeforeReceipt
        /// Integer
        /// Number of days to send reminder email before the promised receipt date
        /// <summary>
        [JsonProperty("reminder_date_before_receipt")]
        [Description("ReminderDateBeforeReceipt")]
        public int? ReminderDateBeforeReceipt { get; set; }

        /// <summary>
        /// PropertyStockSubcontractor
        /// Many2one
        /// The stock location used as source and destination when sending        goods to this contact during a subcontracting process.
        /// stock.location
        /// <summary>
        [JsonProperty("property_stock_subcontractor")]
        [Description("PropertyStockSubcontractor")]
        public long? PropertyStockSubcontractor { get; set; }

        /// <summary>
        /// IsSubcontractor
        /// Boolean
        /// <summary>
        [JsonProperty("is_subcontractor")]
        [Description("IsSubcontractor")]
        public bool? IsSubcontractor { get; set; }

        /// <summary>
        /// PosOrderCount
        /// Integer
        /// The number of point of sales orders related to this customer
        /// <summary>
        [JsonProperty("pos_order_count")]
        [Description("PosOrderCount")]
        public int? PosOrderCount { get; set; }

        /// <summary>
        /// PosOrderIds
        /// One2many
        /// pos.order
        /// partner_id
        /// <summary>
        [JsonProperty("pos_order_ids")]
        [Description("PosOrderIds")]
        public long[] PosOrderIds { get; set; }

        /// <summary>
        /// PurchaseLineIds
        /// One2many
        /// purchase.order.line
        /// partner_id
        /// <summary>
        [JsonProperty("purchase_line_ids")]
        [Description("PurchaseLineIds")]
        public long[] PurchaseLineIds { get; set; }

        /// <summary>
        /// OnTimeRate
        /// Float
        /// Over the past 12 months; the number of products received on time divided by the number of ordered products.
        /// <summary>
        [JsonProperty("on_time_rate")]
        [Description("OnTimeRate")]
        public double? OnTimeRate { get; set; }

        /// <summary>
        /// SaleOrderCount
        /// Integer
        /// <summary>
        [JsonProperty("sale_order_count")]
        [Description("SaleOrderCount")]
        public int? SaleOrderCount { get; set; }

        /// <summary>
        /// SaleOrderIds
        /// One2many
        /// sale.order
        /// partner_id
        /// <summary>
        [JsonProperty("sale_order_ids")]
        [Description("SaleOrderIds")]
        public long[] SaleOrderIds { get; set; }

        /// <summary>
        /// SaleWarn
        /// Selection
        /// Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
        /// <summary>
        [JsonProperty("sale_warn")]
        [Description("SaleWarn")]
        public SalesWarningsResPartnerOdooEnum? SaleWarn { get; set; }

        /// <summary>
        /// SaleWarnMsg
        /// Text
        /// <summary>
        [JsonProperty("sale_warn_msg")]
        [Description("SaleWarnMsg")]
        public string SaleWarnMsg { get; set; }

        /// <summary>
        /// IapEnrichInfo
        /// Text
        /// Stores additional info retrieved from IAP in JSON
        /// <summary>
        [JsonProperty("iap_enrich_info")]
        [Description("IapEnrichInfo")]
        public string IapEnrichInfo { get; set; }

        /// <summary>
        /// PropertyDeliveryCarrierId
        /// Many2one
        /// Default delivery method used in sales orders.
        /// delivery.carrier
        /// <summary>
        [JsonProperty("property_delivery_carrier_id")]
        [Description("PropertyDeliveryCarrierId")]
        public long? PropertyDeliveryCarrierId { get; set; }

        /// <summary>
        /// Image1024
        /// Binary
        /// <summary>
        [JsonProperty("image_1024")]
        [Description("Image1024")]
        public string Image1024 { get; set; }

        /// <summary>
        /// Image512
        /// Binary
        /// <summary>
        [JsonProperty("image_512")]
        [Description("Image512")]
        public string Image512 { get; set; }

        /// <summary>
        /// Image256
        /// Binary
        /// <summary>
        [JsonProperty("image_256")]
        [Description("Image256")]
        public string Image256 { get; set; }

        /// <summary>
        /// Image128
        /// Binary
        /// <summary>
        [JsonProperty("image_128")]
        [Description("Image128")]
        public string Image128 { get; set; }

        /// <summary>
        /// Id
        /// Integer
        /// <summary>
        [JsonProperty("id")]
        [Description("Id")]
        public long Id { get; set; }

        /// <summary>
        /// CreateUid
        /// Many2one
        /// res.users
        /// <summary>
        [JsonProperty("create_uid")]
        [Description("CreateUid")]
        public long? CreateUid { get; set; }

        /// <summary>
        /// CreateDate
        /// Datetime
        /// <summary>
        [JsonProperty("create_date")]
        [Description("CreateDate")]
        public DateTime? CreateDate { get; set; }

        /// <summary>
        /// WriteUid
        /// Many2one
        /// res.users
        /// <summary>
        [JsonProperty("write_uid")]
        [Description("WriteUid")]
        public long? WriteUid { get; set; }

        /// <summary>
        /// WriteDate
        /// Datetime
        /// <summary>
        [JsonProperty("write_date")]
        [Description("WriteDate")]
        public DateTime? WriteDate { get; set; }

        /// <summary>
        /// LastUpdate
        /// Datetime
        /// <summary>
        [JsonProperty("__last_update")]
        [Description("LastUpdate")]
        public DateTime? LastUpdate { get; set; }
    }


    // All the emails and documents sent to this contact will be translated in this language.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum LanguageResPartnerOdooEnum
    {
        [EnumMember(Value = "zh_CN")]
        ChineseSimplified = 1,

        [EnumMember(Value = "en_US")]
        EnglishUS = 2,
    }



    // Invoice & Delivery addresses are used in sales orders. Private addresses are only visible by authorized users.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum AddressTypeResPartnerOdooEnum
    {
        [EnumMember(Value = "contact")]
        Contact = 1,

        [EnumMember(Value = "invoice")]
        InvoiceAddress = 2,

        [EnumMember(Value = "delivery")]
        DeliveryAddress = 3,

        [EnumMember(Value = "other")]
        OtherAddress = 4,

        [EnumMember(Value = "private")]
        PrivateAddress = 5,
    }


    [JsonConverter(typeof(StringEnumConverter))]
    public enum CompanyTypeResPartnerOdooEnum
    {
        [EnumMember(Value = "person")]
        Individual = 1,

        [EnumMember(Value = "company")]
        Company = 2,
    }


    // Status based on activities
    // Overdue: Due date is already passed
    // Today: Activity date is today
    // Planned: Future activities.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum ActivityStateResPartnerOdooEnum
    {
        [EnumMember(Value = "overdue")]
        Overdue = 1,

        [EnumMember(Value = "today")]
        Today = 2,

        [EnumMember(Value = "planned")]
        Planned = 3,
    }


    // Type of the exception activity on record.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum ActivityExceptionDecorationResPartnerOdooEnum
    {
        [EnumMember(Value = "warning")]
        Alert = 1,

        [EnumMember(Value = "danger")]
        Error = 2,
    }


    [JsonConverter(typeof(StringEnumConverter))]
    public enum DegreeOfTrustYouHaveInThisDebtorResPartnerOdooEnum
    {
        [EnumMember(Value = "good")]
        GoodDebtor = 1,

        [EnumMember(Value = "normal")]
        NormalDebtor = 2,

        [EnumMember(Value = "bad")]
        BadDebtor = 3,
    }


    // Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum InvoiceResPartnerOdooEnum
    {
        [EnumMember(Value = "no-message")]
        NoMessage = 1,

        [EnumMember(Value = "warning")]
        Warning = 2,

        [EnumMember(Value = "block")]
        BlockingMessage = 3,
    }


    // Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum StockPickingResPartnerOdooEnum
    {
        [EnumMember(Value = "no-message")]
        NoMessage = 1,

        [EnumMember(Value = "warning")]
        Warning = 2,

        [EnumMember(Value = "block")]
        BlockingMessage = 3,
    }


    // It indicates the membership state.
    // -Non Member: A partner who has not applied for any membership.
    // -Cancelled Member: A member who has cancelled his membership.
    // -Old Member: A member whose membership date has expired.
    // -Waiting Member: A member who has applied for the membership and whose invoice is going to be created.
    // -Invoiced Member: A member whose invoice has been created.
    // -Paying member: A member who has paid the membership fee.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum CurrentMembershipStatusResPartnerOdooEnum
    {
        [EnumMember(Value = "none")]
        NonMember = 1,

        [EnumMember(Value = "canceled")]
        CancelledMember = 2,

        [EnumMember(Value = "old")]
        OldMember = 3,

        [EnumMember(Value = "waiting")]
        WaitingMember = 4,

        [EnumMember(Value = "invoiced")]
        InvoicedMember = 5,

        [EnumMember(Value = "free")]
        FreeMember = 6,

        [EnumMember(Value = "paid")]
        PaidMember = 7,
    }


    // Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum PurchaseOrderResPartnerOdooEnum
    {
        [EnumMember(Value = "no-message")]
        NoMessage = 1,

        [EnumMember(Value = "warning")]
        Warning = 2,

        [EnumMember(Value = "block")]
        BlockingMessage = 3,
    }


    // Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.
    [JsonConverter(typeof(StringEnumConverter))]
    public enum SalesWarningsResPartnerOdooEnum
    {
        [EnumMember(Value = "no-message")]
        NoMessage = 1,

        [EnumMember(Value = "warning")]
        Warning = 2,

        [EnumMember(Value = "block")]
        BlockingMessage = 3,
    }

}
